/**
 *
 * @description:
 * @author: junyong.hong
 * @createTime: 2018/3/29
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
class Calculate{
    /**
     * 计算注数
     * @param active 当前选中的号码
     * @param play_name 当前的玩法标识
     * @return 返回注数
     */
    computeCount(active,play_name){
        // 当前的注数默认是0
        let count = 0;
        // 判断是否支持当前的玩法
        const exist = this.play_list.has(play_name);
        // 把选中的放到数组里 fill填充值为0
        const arr = new Array(active).fill('0');

        // 玩法存在，是否是r开头的
        if(exist && play_name.at(0) === 'r'){
            // 玩法的第二个参数
            count = Calculate.combine(arr,play_name.split('')[1]);
        }
        return count;
    }

    /**
     * 组合运算
     * @param arr 参与组合运算的数组
     * @param size 组合运算的基数
     * @return 计算注数
     */
    static combine(arr,size){
        // 保存最后结果
        let allResult = [];
        // 自执行函数
        (function f(arr,size,result) {
            let arrLen = arr.length;
            if(size > arrLen){
                return;
            }
            if(size === arrLen){
                allResult.push([].concat(result,arr));
            }else{
                for(let i=0;i<arrLen;i++){
                    let newResult = [].concat(result);
                    newResult.push(arr[i]);
                }
                if(size === 1){
                    allResult.push(newResult);
                }else{
                    let newArr = [].concat(arr);
                    newArr.splice(0,i+1);
                    f(newArr,size-1,newResult);
                }
            }
        })(arr,size,[])
    }
}